lexer grammar Analex;

options {
  k = 2;
  language = Java;
}

@lexer::header {
  package Practica4.EBNF;
}

@lexer::members {
  private ArrayList<String> errors = new ArrayList<String>();
    public void displayRecognitionError(String[] tokenNames,
                                        RecognitionException e) {
        String hdr = getErrorHeader(e);
        String msg = getErrorMessage(e, tokenNames);
        errors.add(hdr + " " + msg);
    }
    
    public ArrayList<String> getErrors() {
        return errors;
    }
}

fragment SALTO_LINEA:  ('\r' '\n' | '\r' | '\n');
fragment DIGITO: '0'..'9';
fragment LETRA: 'A'..'Z' | 'a'..'z' | '_';

COMENTARIO_LINEA : '//' (options { greedy=false;}:.)* SALTO_LINEA {skip();};
COMENTARIO_BLOQUE : '/*' ( options {greedy=false;} : . )* '*/' {skip();};
BLANCO: (' ' | '\t' | SALTO_LINEA) {skip();};
NUMERO : (DIGITO)+('.'(DIGITO)+)?;
ID: LETRA (LETRA | DIGITO)*;
OPERADOR: '+'|'-'|'/'|'*';
PARENTESIS: '('|')';
SEPARADOR: ';'; 
OP_ASSIGN: '=';